import java.lang.reflect.Array;
import java.util.*;

public class code02 {

//    字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。
//    输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
//    输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
    public static void main(String[] args) {
        String [] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        //把每一个取出来
        List<List<String>> lists = groupAnagrams(strs);
        for (List<String> list : lists) {
            System.out.println(list);
        }


    }
    public  static  List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String,List> hashMap = new HashMap<>();
        for (String str : strs) {
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            //将排序后的字符串作为哈希表中的key值
            String key = String.valueOf(chars);
            //2.判读哈希表中是否有该key值
            if (!hashMap.containsKey(key)){
                //若不存在，则为新的异位词语，在map中创建新的键值对
                hashMap.put(key,new ArrayList());
            }
            //3.将该字符串放在对应key的list中
            hashMap.get(key).add(str);
        }
        //返回map中所有键值对象构成的list
        return new ArrayList(hashMap.values());
        }

//        for (int i = 0; i < strs.length; i++) {
//                //获取每一个字母
//            for (int j = 0; j < strs[i].length(); j++) {
//                    arrayList.add(strs[i]);
//            }

}
